package com.strong.model;

import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.RandomUtil;
import com.strong.FakerConstants;
import com.strong.enum_.GenderEnum;
import com.strong.model.person.Name;
import lombok.Getter;

import java.util.List;

import static com.strong.FakerConstants.LIST_ALL_FEMALE_NAME;
import static com.strong.FakerConstants.LIST_ALL_MALE_NAME;

/**
 * 中文名字 模型类
 *
 * @author simen
 * @date 2023/04/06
 */
@Getter
public class PersonName extends BaseModel {

    /**
     * 性别枚举
     */
    private final GenderEnum genderEnum;

    /**
     * 姓
     */
    private final String surname;

    /**
     * 名
     */
    private String name;

    /**
     * 全名
     */
    private final String fullName;

    /**
     * 实例化
     *
     * @param genderEnum 性别枚举
     */
    public PersonName(GenderEnum genderEnum) {
        // 如果性别枚举为空，则随机赋值
        if (ObjUtil.isNull(genderEnum)) {
            this.genderEnum = RandomUtil.randomBoolean() ? GenderEnum.FEMALE : GenderEnum.MALE;
        } else {
            this.genderEnum = genderEnum;
        }

        // 根据性别使用不同的”名“队列
        List<Name> listName = this.genderEnum.equals(GenderEnum.MALE) ? LIST_ALL_MALE_NAME : LIST_ALL_FEMALE_NAME;
        // 获取“名”的第一个字
        this.name = RandomUtil.randomEle(listName).getName();
        // 随机获取“名”的第二个字
        if (RandomUtil.randomBoolean()) {
            this.name = this.name + RandomUtil.randomEle(listName).getName();
        }

        // 获取随机”姓“
        this.surname = RandomUtil.randomEle(FakerConstants.LIST_ALL_SURNAME).getSurname();

        this.fullName = this.surname + this.name;
    }
}
